// 只加载一次 DocsAPI
let isDocsAPILoaded = false
// 保存当前 DocEditor 实例
let docEditorInstance = null

/**
 * 加载 Office/PDF 文件到 OnlyOffice 编辑器
 * @param {Object} options
 * @param {string} options.containerId 编辑器容器 ID
 * @param {string} options.onlyOfficeApiUrl DocsAPI 地址
 * @param {string} options.fileUrl 文件的完整访问 URL
 * @param {string} options.title 文件名称
 * @param {string} options.fileType 文件扩展名（docx, pptx, pdf, xlsx）
 * @param {string} [options.mode='view'] 编辑器模式 'view' 或 'edit'
 * @param {string} [options.lang='zh-CN'] 编辑器语言
 * @param {number|string} [options.height] 编辑器高度（px 或百分比），不传默认 window.innerHeight - 2
 * @param {string} [options.callbackUrl] 保存文件的回调接口
 * @param {boolean} [options.forceSave] 是否启用强制保存
 */
export const openOfficeFile = async ({
    containerId,
    onlyOfficeApiUrl,
    fileUrl,
    title,
    fileType,
    mode = 'view',
    lang = 'zh-CN',
    height,
    callbackUrl,
    forceSave = false // 通过参数控制是否强制保存，默认不启用

}) => {
    if (!["docx", "pptx", "pdf", "xlsx"].includes(fileType)) return

    const loadEditor = () => {
        const viewportHeight = height || (window.innerHeight - 2)

        // 销毁旧实例
        if (docEditorInstance) {
            docEditorInstance.destroyEditor()
            docEditorInstance = null
        }

        // 创建新实例
        docEditorInstance = new DocsAPI.DocEditor(containerId, {
            document: {
                fileType: fileType,
                key: "office-file-key-" + Date.now(),
                title: title,
                url: fileUrl
            },
            documentType: ["docx", "pdf"].includes(fileType)
                ? "text"
                : fileType === "pptx"
                    ? "presentation"
                    : "spreadsheet",
            editorConfig: {
                callbackUrl: callbackUrl || '', // 编辑文件回调接口，可选
                mode,
                customization: {
                    forcesave: forceSave // 是否启用强制保存，可选
                },
                lang// 编辑器语言，可选值：'zh', 'ru', 'en', 'de', 'es', 'it', 'nl', 'pt', 'fr', 'ko', 'ja', 'lt', 'uk'
            },
            height: viewportHeight,// 编辑器高度，可选
            width: "100%"
        })
    }

    if (isDocsAPILoaded) {
        loadEditor()
    } else {
        const script = document.createElement("script")
        script.src = onlyOfficeApiUrl + '/web-apps/apps/api/documents/api.js'
        script.onload = () => {
            if (!window.DocsAPI) {
                console.error("DocsAPI 未加载！")
                return
            }
            isDocsAPILoaded = true
            loadEditor()
        }
        document.body.appendChild(script)
    }
}
